import { Entity, Column, OneToMany } from "typeorm";
import { Base } from "@/entities.base/base.entity";
import { CustomerStoredValueCard } from "../customer-stored-value-card.entity";
import { CustomerPoints } from "../customer-points.entity";
import { Order } from "../order.entity";

@Entity({ comment: '客户表', name: 'basis_customer' })
export class Customer extends Base {

    /** 客户编号 */
    @Column({
        comment: '客户编号',
        length: 50,
        unique: true, // 客户编号唯一
    })
    code: string;

    /** 客户姓名 */
    @Column({
        comment: '客户姓名',
        length: 50,
    })
    name: string;

    /** 客户手机号 */
    @Column({
        comment: '客户手机号',
        length: 20,
        unique: true, // 手机号唯一
        nullable: true, // 手机号可以为空
    })
    phone: string;

    /** 客户邮箱 */
    @Column({
        comment: '客户邮箱',
        length: 100,
        nullable: true, // 邮箱可以为空
    })
    email?: string;

    /** 客户性别 */
    @Column({
        comment: '客户性别',
        length: 10,
        nullable: true, // 性别可以为空
    })
    gender?: string;

    /** 客户年龄 */
    // @Column({
    //     comment: '客户年龄',
    //     type: 'int',
    //     nullable: true, // 年龄可以为空
    // })
    // age?: number;

    /** 客户生日 */
    @Column({
        comment: '客户生日',
        type: 'date',
        nullable: true, // 生日可以为空
    })
    birthday?: Date;

    /** 发质类型 */
    @Column({
        comment: '发质类型',
        length: 10,
        nullable: true, // 发质类型可以为空
    })
    hairType?: string;

    /** 头皮状况 */
    @Column({
        comment: '头皮状况',
        length: 10,
        nullable: true, // 头皮状况可以为空
    })
    scalpCondition?: string;

    /** 过敏史 */
    @Column({
        type: 'text',
        comment: '过敏史',
        nullable: true, // 过敏史可以为空
    })
    allergyHistory?: string;

    /** 客户偏好/备注 */
    @Column({
        type: 'text',
        comment: '客户偏好/备注',
        nullable: true, // 客户偏好/备注可以为空
    })
    preference?: string;

    /** 当前积分余额 */
    @Column({
        comment: '当前积分余额',
        type: 'decimal',
        precision: 10,
        scale: 2,
        default: 0,
    })
    currentPoints: number;

    /** 客户储值卡 - 一对多关系 */
    @OneToMany(() => CustomerStoredValueCard, card => card.customer)
    storedValueCards: CustomerStoredValueCard[];

    /** 客户积分记录 - 一对多关系 */
    @OneToMany(() => CustomerPoints, points => points.customer)
    pointsRecords: CustomerPoints[];

    /** 客户订单记录 - 一对多关系 */
    @OneToMany(() => Order, order => order.customer)
    orders: Order[];
}